home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / compuserve-file-archive / 04 geoProgramming / GEO4TH.SDA / FORTH.DOC (.txt) next >
Encoding:
GEOS ConVerT  |  2019-04-13  |  51.9 KB  |  1,339 lines

  1. FORTH.DOC
  2. SEQ formatted GEOS file V1.0
  3. Olivetti PR2300
  4. OP V2.0 or higherC
  5. BLASTER'S CONVERTER V2.5
  6. Write Image V1.1
  7. geoWrite    V1.1
  8. *Documentation for geosFORTH V1.0
  9. (c) Nicholas Vrtis - 1989
  10.              
  11. HgeosFORTH V1.0 (c) 1989 Nicholas J. Vrtis
  12. This version of FORTH for GEOS has been adapted from the figFORTH release-1 6502 definition by:
  13. @Nicholas J. Vrtis
  14. 5863 Pinetree S.E.
  15. Kentwood, MI 49508
  16. The original definition was created and supplied by:
  17. @Forth Interest Group
  18. P.O. Box 1105
  19. San Carlos, CA 94070
  20. GEOS is a copyright of 
  21. @Berkely Softworks
  22. This version of geosFORTH is distributed as User Supported software.  You may freely copy and distribute this software.  The only conditions are that you cannot charge more than a nominal copy/handling fee, and you must not remove the credits.  If you find the program useful and interesting, I would like a $10 support fee, or a disk of your software in exchange to the Kentwood address.  I have Forth 79 standard version which runs on the native C-64 and includes floating point support and an assembler.  If I get enough interest (and support) with this version, I will port that one over to GEOS also.  If you send a support fee, I will send back the Forth 79 version if I ever get that converted.
  23. As usual, this software has been  tested and does not have any bugs that I know of.  If you find some, please drop me a line and describe the error or problem.  Without some sort of feedback I will not know what needs to be fixed.
  24. The definitions are presented in the order of their ASCII sort.  The first line of each entry shows a symbolic description of the action of the w
  25. The definitions are presented in the order of their ASCII sort.  The first line of each entry shows a symbolic description of the action of the word on the FORTH stack.  The symbols indicate the order of parameters on the stack.  The stack is shown in order from left to right, with three dashes (---) indicating the execution point of the word.  Symbols to the left of the dashes indicate input parameters, while symbols to the right indicate output parameters.  Unless otherwise noted, all references to numbers are for 16 bit signed integers.  All arithemetic is implicitly 16 bit signed integer math.  The symbols used are:
  26. @addr
  27.     memory address
  28.     8 bit byte
  29.     16 bit signed integer number
  30.     16 bit unsigned integer
  31.     boolean flag (0=false, non-0=true)
  32.     boolean false flag (0)
  33.     boolean true flag (non-0)
  34. Some fig-FORTH words have been redefined in geosFORTH.  In general, the operation has not been changed, but some of the internal working have changed in order to adapt them to a GEOS environment.  Additional words have been defined for source code editing and access to some of the GEOS routines.  I have not added any printer support for the source code.  That is left 'as an excercise for the reader'.  Source code is a standard GEOS VLIR file with each VLIR record 1024 bytes long.  The last byte of the record is a zero.  There are no carriage control characters.  Read it in, hack it up into 64 character lines and print it.
  35. @!    n addr ---
  36. Store the 16 bit integer 
  37.  at address 
  38. @addr
  39. @!csp    ---
  40. Save the current stack position in CSP (used as part of compiler checking).
  41. @#    n1 --- n2
  42. Generates from a number 
  43. , the next ASCII character which is placed in an output string.  The result 
  44.  is the quotient after division by 
  45. @base
  46. , and is maintained for further processing.  Used between 
  47.  and 
  48.  (See 
  49. @#>    n --- addr count
  50. Terminates numeric output conversion by dropping 
  51. , leaving the text address and character count suitable for 
  52. @type
  53. @#s    n1 --- n2
  54. Generates ASCII text in the text output buffer by the use of 
  55. , until a zero number 
  56.  results.  Used between 
  57.  and 
  58. @'    --- addr
  59. Used in the form 
  60. @' wwww
  61.   Leaves the parameter field address of the dictionary word 
  62. @wwww
  63. .  Executes in a colon definition to compile the address as a literal.  If the word is not found, an error message is produced.
  64. @(    ---
  65. Starts a comment.  All input until the following 
  66.  or a null is ignored.  Executes during a colon definition to allow comments within a definition.  A blank after the leading 
  67.  is required.
  68. @(.")    ---
  69. The run-time proceedure compiled by 
  70.  which prints the following inline text.
  71. @(;code)    ---
  72. The run-time proceedure compiled by 
  73. @;code
  74.  that rewrites the code field of the most recently defined word to point to the following machine code sequence.
  75. @(+loop)    n ---
  76. The run-time proceedure compiled by 
  77. @+loop
  78.  which increments the loop index by 
  79.  and tests for loop completion.
  80. @(abort)    ---
  81. Executes after an error.  This word normally executes 
  82. @abort
  83. @(do)    ---
  84. The run-time proceedure compiled by 
  85.  which moves the loop control parameters to the return stack.
  86. @(find)    addr1 addr2 --- pfa b tf
  87.      (OK)
  88. @addr1 addr2 --- ff
  89.              (bad)
  90. Searches the dictionary starting at the name field address 
  91. @addr2
  92. , matching to the text at 
  93. @addr1
  94. .  Returns the parameter field address (
  95. ), the length byte of the name field (
  96. ), and a true flag (
  97. ) for a good match.  If no match is found, only the false flag (
  98. ) is returned.
  99. @(loop)    ---
  100. The run-time proceedure compiled by 
  101. @loop
  102.  which increments the loop index and tests for loop completion.
  103. @(number)    n1 addr1 --- n2 addr2
  104. Convert ASCII text beginning at 
  105. @addr1+1
  106.  with regard to 
  107. @base
  108. .  The new value is accumulated into 
  109.  being left as 
  110. @Addr2
  111.  is the address of the first unconvertable digit.  Used by 
  112. @number
  113. @*    n1 n2 --- prod
  114. Leave the signed product of the two signed numbers (
  115. @n1*n2
  116. @+    n1 n2 --- n3    
  117. Leave the sum of 
  118. @n1+n2
  119. @+!    n addr ---    
  120.  to the value at the address.
  121. @+-    n1 n2 --- n3    
  122. Apply the sign of 
  123.  to the value of 
  124. , leaving the result as 
  125. @+buf    addr1 --- addr2 f    
  126. Advance the disk buffer address 
  127. @addr1
  128.  to the address of the next buffer 
  129. @addr2
  130. .  The flag 
  131.  is false when 
  132. @addr2
  133.  is the buffer presently pointed to by the variable 
  134. @prev
  135. @+loop    n1 ---
  136.      (run time)
  137. @addr n2 ---
  138.       (compile time)
  139.  Used in a colon definition in the form:
  140. @do ... n1 +loop
  141. At run time, 
  142. @+loop
  143.  selectively controls branching back to the corresponding 
  144.  based on 
  145. , the current loop index, and the loop limit.  The signed increment 
  146.  is added to the index and the total is compared to the loop limit.  The branch back to 
  147.  occurs until the new index is equal or greater than the limit (if 
  148. >0), or until the new index is equal or less than the limit (if 
  149. <0).  Upon exiting the loop, the parameters are discarded and execution continues after 
  150. @+loop
  151. At compile time, 
  152. @+loop
  153.  compiles the run time word 
  154. @(+loop)
  155.  and the branch offset computed from 
  156. @here
  157.  to the address left on the stack by 
  158. .  The value 
  159.  is used for compile time error checking to ensure that the 
  160. @+loop
  161.  is within a 
  162. @+origin    n --- addr    
  163.  to the memory address of the origin parameter area leaving 
  164. @addr
  165. .  The parameter area is located at the start of the program area.
  166. @,    n ---    
  167. Store 
  168.  into the next available dictionary location, advancing the dictionary pointer.
  169. @-    n1 n2 --- n3    
  170. Leave the difference of 
  171. @n1-n2
  172. @-->        
  173. Continue interpretation with the next disk screen.
  174. @-dup    n --- n 
  175. (if 0)
  176. @n --- n n
  177.  (if <>0)    Duplicate 
  178.  only if it is non-zero.  This is usually used to copy a value just before 
  179. , to eliminate the need for an 
  180. @else
  181.  part to drop it.
  182. @-find    --- pfa b tf
  183.  (found)
  184. @--- ff
  185.  (not found)    Accepts the next text word (delimited by blanks) in the input stream to 
  186. @here
  187.  and searches 
  188. @context
  189.  and then 
  190. @current
  191.  vocabularies for a matching entry.  If found, the dictionary entry's parameter field address (
  192. ), its length byte (
  193. ), and a true flag (
  194. ).  Otherwise, only a flase flag (
  195. ) is left.
  196. @-trailing    addr n1 --- addr n2    
  197. Adjusts the character count 
  198.  of a text string beginning at address 
  199. @-trailing    addr n1 --- addr n2    
  200. Adjusts the character count 
  201.  of a text string beginning at address 
  202. @addr
  203.  to suppress the output of trailing blanks  or zeros (i.e. the characters at 
  204. @addr+n1
  205. @addr+n2
  206.  are blanks or zeros).
  207. @.    n ---    
  208. Print a number from a signed 16 bit value, converted according to the numeric 
  209. @base
  210. .  A trailing blank follows.
  211. @."    ---    
  212. Used in the form:
  213. @." wwww"
  214. Used in a colon definition, 
  215.  compiles 
  216. @(.")
  217.  and an inline string 
  218. @wwww
  219.  to transmit the text to the screen.  The space after the 
  220.  is necessary, and will not be included in the inline string.
  221. Used outside a colon definition, 
  222.  will immediately print the ext until the final 
  223.   The maximum number of characters is 256.
  224. @.r    n1 n2 ---    
  225. Print the number 
  226.  right aligned in a field whose width is 
  227. .  No following blank is printed.
  228. @/    n1 n2 --- n3    
  229. Leave the signed quotient 
  230. @n3=n1/n2
  231. @/mod    n1 n2 --- n3 n4    
  232. Leave the remainder (
  233. ) and the signed quotient of 
  234. @n1/n2
  235. .   The remainder has the sign of the dividend (
  236. @0 1 2 3    --- n    
  237. These small numbers are used so often that it is worth while to define them as constants.
  238. @0<    n ---  f    
  239. Leave a true flag if the number is less than zero (negative), otherwise leave a false flag.
  240. @0=    n --- f    
  241. Leave a true flag if the number is equal to zero, otherwise leave a false flag.
  242. @0branch    f ---    
  243. The run time procedure to conditionally branch.  If 
  244.  is false (0), the following signed inline value is added to the interpretive pointer to branch ahead or back.  Compiled by 
  245. @until
  246. , and 
  247. @while
  248. @1+    n1 --- n2    
  249. Increment 
  250.  by 1, leaving 
  251. @2+    n1 --- n2    
  252. Increment 
  253.  by 2, leaving 
  254. @1-    n1 --- n2    
  255. Decrement 
  256.  by 1, leaving 
  257. Used to define a new word in FORTH, called a colon definition, using the form:
  258. @: cccc .... ;
  259. This creates a dictionary entry defining 
  260. @cccc
  261.  as equivalent to the following sequence of FORTH word definitionss (
  262. ) until the next 
  263. .  The compiling process is done by the text interpreter as long as 
  264. @state
  265.  is non-zero.  Other details are that the 
  266. @context
  267.  vocabulary is set to the 
  268. @current
  269.  vocabulary and that words with the precedence bit set are executed rather than being comipled (see 
  270. @compile
  271. @;    ---    
  272. Terminate a colon definition and stop further compilation.  Compiles 
  273. @;s    ---    
  274. Stop interpretation of a screen.  
  275.  is also the runtime word compiled at the end 
  276. @;s    ---    
  277. Stop interpretation of a screen.  
  278.  is also the runtime word compiled at the end of a colon definition by (
  279. ) which returns execution to the calling word.
  280. @<    n1 n2 --- f
  281.     Leave a true flag if 
  282.  is less than 
  283. ; otherwise leave a false flag.
  284. @<#    ---    
  285. Setup for pictured numeric output formatting using the following form:
  286. @<# # #s sign #>
  287. The conversion is done on a signed number producing text at 
  288. @<builds    ---    
  289. Used within a colon definition with the following form:
  290. @: cccc <builds ....
  291.     does> .... ;
  292. Each time 
  293. @cccc
  294.  is executed, 
  295. @<builds
  296.  defines a new word with a high level execution procedure.  Executing 
  297. @cccc
  298.  in the form:
  299. @cccc xxxx
  300. uses 
  301. @<builds
  302.  to create a dictionary entry for 
  303. @xxxx
  304.  with a call to the 
  305. @does>
  306. @cccc
  307. .  When 
  308. @xxxx
  309.  is later executed, it has the address of its parameter area on the stack and executes the words after 
  310. @does>
  311. @cccc
  312. @<builds
  313.  and 
  314. @does>
  315.  allow run time procedures written in high level rather than assembler level code.
  316. @=    n1 n2 --- f    
  317. Leave a true flag if 
  318. @n1=n2
  319. ; otherwise leave a false flag.
  320. @>    n1 n2 --- f    
  321. Leave if true flag if 
  322. @n1>n2
  323. ; otherwise leave a false flag.
  324. @>r    n ---
  325.     Remove a number from the computation (Forth) stack and place as the most accessable on the return stack.  Use should be balanced with 
  326.  in the 
  327.  definition.
  328. @?    addr ---    
  329. Print the value contained at the address in free format (using 
  330. ) according to the current base.
  331. @?button    --- f    
  332. Leave a flag indicating the current status of the mouse button.  True means the button is pressed, false means the button is up.  If the mouse is currently not active, a call is made to the UPDATE-MOUSE GEOS routine to get the current status of the button.
  333. @?comp    ---    
  334. Issue error message #17 if not compiling.
  335. @?csp    ---    
  336. Issue error message #20 if the current stack position differs from the value saved in 
  337.  (used to make sure the stack is kept even).
  338. @?derror    n ---
  339.  is not zero, issue the error message 
  340. @DISK ERROR n
  341.  and call 
  342. @quit
  343. .  If 
  344.  is zero (the normal return from a disk function), 
  345.  is discarded and processing continue.
  346. @?error    f n ---    
  347. Issue error message #
  348. , if the flag (
  349. ) is true.
  350. @?exec    ---    
  351. Issue error message #18 if not executing.
  352. @?loading    ---    
  353. Issue error message #22 if not loading.
  354. @?mouse    --- n1 n2    
  355. Leave the y coordinate (
  356. ), and the x coordinate (
  357. ) of the current mouse position.  If the mouse
  358. @?mouse    --- n1 n2    
  359. Leave the y coordinate (
  360. ), and the x coordinate (
  361. ) of the current mouse position.  If the mouse is not turned on (via 
  362. @mouseon
  363. ), the coordinates will be as they were the last time the mouse was active.
  364. @?pairs    n1 n2 ---    
  365. Issue error message #19 if 
  366.  does not equal 
  367. .  Used by figForth to indicate that compiled conditionals do not match (
  368. @begin .... until,  if ... endif
  369. @?stack    ---    
  370. Issue error message #?? if the stack is out of bounds.
  371. @?vopen    ---    
  372. Checks to see if a GEOS VLIR file is open (usually the source file).  Performs no action if it is already open.  If the file is not open, executes 
  373. @vopen
  374.  to open the file named in 
  375. @@    addr --- n    
  376. Leave the 16 bit contents of the address 
  377. @addr.
  378. abort    ---    
  379. Clears the stacks and enters the execution state, and return control to the terminal input device.
  380. @abs    n --- u    
  381. Leave the absolute value of 
  382. @again    addr n --- 
  383. (compile)
  384. @--- 
  385. (runtime)    Used in a colon definition as:
  386. @begin .... again
  387. At run time, 
  388. @again
  389.  forces execution to return to just after the corresponding 
  390. @begin
  391. .  The stack is unchanged.  Execution will never leave this loop (unless 
  392. @r> drop
  393.  is executed one level below).
  394. @allot    n ---    
  395. Add the signed number to the dictionary pointer (
  396. ).  May be used to reserve dictionary space or re-origin memory.
  397. @and    n1 n2 --- n3    
  398. Leave the bitwise logical 
  399.  and 
  400. @b/buf    --- n    
  401. This constant leaves the number of bytes per disk buffer (the number read from disk, excluding the screen number control bytes).  Each memory buffer is 
  402. @b/buf + 2
  403.  bytes long.
  404. @back    addr ---    
  405. Calculate the backward branch offset from 
  406. @here
  407. @addr
  408.  and compile it into the next available dictionary memory address.
  409. @base    --- addr    
  410. A user variable containing the current number base used for input and output conversion.
  411. @begin    --- addr n 
  412. (compile)
  413. @--- 
  414. (run time)    Used in the colon definition as:
  415. @begin ... until
  416.         begin ... again
  417.         begin ... while ... repeat
  418. At run time, 
  419. @begin
  420.  marks the start of a sequence that may be repetitively executed.  It serves as a return point from the corresponding 
  421. @until, again, 
  422. @repeat
  423. .  When executing 
  424. @until
  425. , a return to 
  426. @begin
  427.  will occur if the top of the stack is false; for 
  428. @again
  429.  and 
  430. @repeat
  431.  a return to 
  432. @begin
  433.  always occurs.
  434. At compile time, 
  435. @begin
  436.  leaves its return address (
  437. @addr
  438. ) and 
  439.  for compiler error checking.
  440. @bl    --- c    
  441. A constant that leaves the ASCII value for the "blank" character.
  442. @blanks    addr n ---    
  443. Fill and area of memory beginning at 
  444. @addr
  445.  with 
  446.  "blank" characters.
  447. @block    n --- addr    
  448. Leave the memory address of the block buffer containing block 
  449. .  If the block is not already in memory, it is transferred from disk to which ever buffer was least recently written.  If the block occupying that buffer has been marked as updated (via 
  450. @update
  451. ), that block is first written to disk before block 
  452.  is read in.  See also 
  453. @buffer, update, flush
  454. urns execution to the calling word.
  455. @<    n1 n2 --- f
  456.     Leave a true flag if 
  457. @block-read    addr n1 n2 --- f    
  458. Read VLIR record number 
  459.  (up to 
  460.  bytes) into a buffer at address 
  461. @addr
  462. .  If there is a disk error, the standard GEOS disk error +64 is left as the flag 
  463. , otherwise a zero is returned.
  464. @block-write addr n1 n2 --- f    
  465. Write 
  466.  bytes to  the VLIR record number 
  467.  from buffer at 
  468. @addr
  469. .  If there is a disk error, the standard GEOS disk error +64 is left as the flag 
  470. , otherwise a zero is returned.
  471. @branch    ---    
  472. The run time word to unconditionally branch.  A signed 16 bit inline offset is added to the interpretive pointer (
  473. ) to branch ahead or back.  
  474. @branch
  475.  is compiled by 
  476. @else, again, repeat
  477. @buffer    n --- addr    
  478. Obtain the next memory buffer, assigning it to block 
  479. .  If the contents of the buffer are marked as updated, the buffer is written to disk before being assigned.  The block is not read from the disk.  The address left is the first byte within the buffer for data storage (ie. past the 2 byte block number).
  480. @c!    b addr ---    
  481. Store 8 bits at address 
  482. @addr
  483. @c,    b ---    
  484. Store 8 bits into the next available dictionary location, advancing the dictionary pointer.
  485. @c@    addr --- b    
  486. Leave the 8 bits contents of 
  487. @addr
  488. @cfa    pfa --- cfa    
  489. Convert the parameter field address (
  490. ) of a definition to it's code field address.
  491. @clit    ---    
  492. A run time word to take the next dictionary byte and put it on the stack (this is a single byte version fo 
  493. @cls    b ---    
  494. Fill the screen from the GEOS locations 
  495. @windowTop, windowBottom, leftMargin, rightMargin,
  496.  with the pattern specified by 
  497. @cmove    addr1 addr2 n ---    
  498. Move the 
  499.  number of bytes from 
  500. @addr1
  501. @addr2
  502. .  The contents are moved from the start of 
  503. @addr1
  504.  proceeding towards higher memory.  No check is made for overlapping areas.
  505. @cold    ---    
  506. The cold start word to adjust the dictionary pointer to the original value when geosForth was loaded.  The word then restarts the system by calling 
  507. @abort
  508. .  This word is useful to
  509. remove all the application programs and restart geosForth.
  510. @compile    ---    
  511. When the word containing 
  512. @compile
  513.  executes, the execution address of the word following 
  514. @compile
  515.  is copied (compiled) into the dictionary.  This allows specific compilation situations to be handled in addition to simply compiling an execution address (which the interpreter already does).
  516. @constant    n ---    
  517. A defining word used in the form:
  518. @n constant cccc
  519. This creates the word 
  520. @cccc
  521. , with it's parameter field containing 
  522. .  When 
  523. @cccc
  524.  is later executed, it will push the value of 
  525.  to the stack.
  526. @context    --- addr    
  527. A user variable containing a pointer to the vocabulary within which dictionary searches will first begin.
  528. @cols    ---    
  529. A constant containing the number of pixel columns which will fit on a screen (normally 320).
  530. @count    addr1 --- addr2 n    
  531. Leave the byte address 
  532. @addr2
  533.  and byte count 
  534.  of a message text beginning at address 
  535. @addr1
  536. .  It is presumed that the first byte ad 
  537. @count    addr1 --- addr2 n    
  538. Leave the byte address 
  539. @addr2
  540.  and byte count 
  541.  of a message text beginning at address 
  542. @addr1
  543. .  It is presumed that the first byte ad 
  544. @addr1
  545.  contains the text byte count, and the acutal text starts with the second byte.  Typically 
  546. @count
  547.  is followed by 
  548. @type
  549. @cr    ---    
  550. Set the user variable 
  551.  to zero to move the text cursor to the left edge of the screen.  Advance the user variable 
  552.  by one text line.  
  553. check the resulting text line location against the geos bottom margin value and calls 
  554. @scroll
  555.  to scroll the screen if needed.
  556. @create    ---    
  557. A defining word used in the form:
  558. @create cccc
  559. Used by such words as 
  560. @code
  561.  and 
  562. @constant
  563.  to create a dictionary header for the Forth word definition.  The code field contains the address of the word's parameter field.  
  564. @cccc
  565.  is created in the 
  566. @current
  567.  vocabulary.
  568. @csp    --- addr    
  569. A user variable temporarily storing the stack pointer position, for compilation error checking.
  570. @current    --- addr    
  571. A user variable containing the vocabulabulary into which new words are compiled.
  572. @decimal    ---    
  573. Set the numeric conversion 
  574. @base
  575.  for base 10 (decimal) input and output of numbers.
  576. @definitions    ---    
  577. Used in the form:
  578. @cccc definitions
  579. Set the 
  580. @current
  581.  vocabulary to the 
  582. @context
  583.  vocabulary.  In the example, executing vocabulary name 
  584. @cccc
  585.  made it the 
  586. @context
  587.  vocabulary and executing 
  588. @definitions
  589.  made both specify the same vocabulary.
  590. @depth    --- n
  591. A word which returns the current number of items on the Forth stack (not counting the 
  592.  returned by 
  593. @depth
  594. @desktop        
  595. This word exits geosFORTH and returns to the GEOS DeskTop.
  596. @digit    c n1 --- n2 tf    
  597. @c n1 --- ff    
  598. (bad)
  599. Converts the ASCII character 
  600.  (using the base 
  601. ) to its binary equivalent 
  602. , accompanied by a true flag.  If the conversion is invalid, leaves only a false flag.
  603. @do    n1 n2 ---    
  604. (run time)
  605. @addr n ---    
  606. (compile time)
  607. At run time, 
  608.  begins a sequence with repetitive execution controlled by a loop limit 
  609.  and an index.  The initial index value is 
  610.  removes these from the stack.  Upon reaching 
  611. @loop
  612. , the index is incremented by one.  Until the new index equals or exceeds the limit, execution loops back to just after 
  613. , otherwise the loop parameters are discarded and execution
  614. continues following the 
  615. @loop
  616. .  Both 
  617.  and 
  618.  are determined at run time and may be the result of other operations.  Within a loop, 
  619.  will copy the current value of the index to the stack.  See 
  620. @i, loop, +loop, leave
  621. .  When compiling within a colon definition, 
  622.  compiles 
  623. @(do)
  624. , and leaves the following address 
  625. @addr
  626.  and 
  627.  for later error checking.
  628. @does>    ---    
  629. A word which defines the run time action within a high level defining word.  
  630. @does>
  631.  alters the code field and first parameter of the new word to execute the sequence of compiled word addresses following 
  632. @does>
  633. .  Used in combination with 
  634. @<builds
  635. .  When the 
  636. @does>
  637.  part executes it begins with the address of the first parameter of the new word on the stack.  This allows interpretation using this area or its contents.  Typical uses include multidimensional arrays and compiler generation.
  638. @dp    --- addr    
  639. A user variable, the dictionary pointer, which contains the address of the next free memory above the dictionary.  This is the value returned by 
  640. @here
  641. , and updated by 
  642. @allot
  643. @dpl    ---
  644. @dp    --- addr    
  645. A user variable, the dictionary pointer, which contains the address of the next free memory above the dictionary.  This is the value returned by 
  646. @here
  647. , and updated by 
  648. @allot
  649. @dpl    --- addr    
  650. A user variable containing the number of digits to the right of the decimal point on integer input.  It may be used to hold output column location of a decimal point in user generated formatting.  The default value is -1.
  651. @drop    n ---    
  652. Discard the value currently on top of the stack.
  653. @dup    n --- n n    
  654. Duplicate the value on top of the stack.
  655. @else    addr1 n1 --- addr2 n2
  656.   (compile time)
  657. Occurs in a colon definition in the form:
  658. @if ... else ... endif
  659. At run time, 
  660. @else
  661.  executes after the true part following 
  662. @if.  else
  663.  forces execution to skip over the following false part and resumes exectuion after the 
  664. @endif
  665. .  It has no stack effect.
  666. At compile time 
  667. @else
  668.  compiles 
  669. @branch
  670.  reserving a branch offset, and leaves 
  671. @addr2 
  672. for error testing.  
  673. @else
  674.  also resolves the pending forward branch from 
  675.  by calculating the offset from 
  676. @addr1
  677. @here
  678.  and storing it at 
  679. @addr1.
  680. emit    c ---    
  681. Transmit ASCII character 
  682.  to the screen.  The user variable 
  683.  is incremented by the width of the character.
  684. @empty-buffers ---    
  685. Mark all the block buffers as empty.  Updated blocks are 
  686.  written to disk.  
  687. @empty-buffers
  688.  is called as part of loading the geosForth, but is not called as part of 
  689. @cold
  690. @enclose    addr c --- addr n1 n2 n3
  691. This is the text scanning primative used by 
  692. @word
  693. .  From the text address 
  694. @addr
  695.  and an ASCII delimiting character 
  696. @c, enclose
  697.  determines the offset (
  698. ) to the first non-delimiter character, the offset (
  699. ) to the first delimiter after the text, and the offset (
  700. ) to the first character not included.  
  701. @enclose
  702.  will not process past an ASCII 'null' ($00), treating it as an unconditional delimiter.
  703. @end    ---    
  704. This is an alias (duplicate) of 
  705. @until.
  706. endif    addr n ---    
  707. (compile time)
  708. Occurs in a colon definition in the form:
  709. @if ... endif
  710.     if ... else ... endif
  711. At run time, 
  712. @endif
  713.  serves only as the destinition of a forward branch from 
  714. @else
  715. .  It marks the conclusion of the conditional structure.
  716. At compile time, 
  717. @endif
  718.  computes the forward branch offset from 
  719. @addr
  720. @here
  721.  and stores it at 
  722. @addr
  723.  is used to make sure the previous conditional was 
  724. @else.
  725. erase    addr n ---    
  726. Clear a regions of memory to zeros
  727. from 
  728. @addr
  729.  for a length of 
  730.  bytes.
  731. @error    n ---     
  732. Prints the error message ' ?message #
  733. ',  and calls 
  734. @quit.
  735. execute    addr ---    
  736. Execute the definition whose code field address (
  737. @addr
  738. ) is on the stack.
  739. @expect    addr n ---    
  740. Transfer character
  741. @expect    addr n ---    
  742. Transfer characters from the keyboard to 
  743. @addr
  744. ,  until a 
  745. return
  746.  has been input.  Only 
  747.  characters will be accepted.  The input string will have an ASCII 'null' added at the end.  
  748. @expect
  749.  will recognize a number of editing characters.  CTRL-X will erase all input characters so you can start entering them again, the left and right cursor controls will allow you to move within the buffer.  
  750. @expect
  751.  honors the GEOS left and right margin setting.  If the width of the characters being inputted exceeds the margins, 
  752. @expect
  753.  will scroll the window left and right as needed.
  754. @fence    --- addr    
  755. A user variable containing an address below which 
  756. @forget
  757. ting is trapped.  To 
  758. @forget
  759.  below this point, the user must alter the contents of 
  760. @fence
  761. .  This prevents accidentially whiping out important parts of Forth.  
  762. @fence
  763.  is initialized to the end of Forth when it is loaded.
  764. @fill    addr n b ---    
  765. Fill memory from 
  766. @addr
  767.  with 
  768.  bytes of the value 
  769. first    --- addr    
  770. A constant that leaves the address of the first (lowest) block buffer.
  771. @fld    --- addr    
  772. A user variable used to hold the output field width.
  773. @flush    ---    
  774. Force all updated disk buffers to be written to disk.  
  775. @desktop
  776.  calls 
  777. @flush
  778.  to make sure all buffers are written before exiting to the DeskTop.
  779. @forget    ---    
  780. Used in the form:
  781. @forget cccc
  782. Deletes the definition named 
  783. @cccc
  784.  from the dictionary, along with all entries physically following it.  An error message will occur if the 
  785. @current
  786.  and 
  787. @context
  788.  vocabularies are not the same.
  789. @forth    ---    
  790. The name of the primary vocabulary.  Execution makes 
  791. @forth
  792.  the 
  793. @context
  794.  vocabulary.  Until additional user vocabularies are defined, new user definitions become a part of 
  795. @forth.  forth
  796.  is immedate, so it will execute during the creation of a colon definition, to allow the selection of this vocabulary at compile time.
  797. @get    n ---    
  798. Read the screen 
  799.  into memory.  Unlike 
  800. @block
  801. , this word will force a read of the screen from the disk.  If the screen is currently in memory, that buffer will be reused to hold the copy being read in, but the old screen will not be written to disk.  
  802.  is not updated by this word.
  803. @here    --- addr    
  804. Leave the address of the next available dictionary location.
  805. @hex    ---    
  806. Set the numeric conversion base to sixteen (hexadecimal).
  807. @hld    --- addr    
  808. A user variable that holds the adress of the latest character of text during numeric output conversion.
  809. @hold    c ---    
  810. Used between 
  811. @<# #>
  812.  to insert an ASCII character into a pictured numeric output string (e.g. 
  813. @2E hold
  814.  will place a decimal point).
  815. @i    --- n    
  816. Used within a 
  817. @do ...
  818.  to copy the current loop index to the stack.
  819. @id.    nfa ---    
  820. Print a definition's name from its name field address.
  821. @if    --- ad
  822. @if    --- addr n    
  823. (compile time)
  824. @f ---    
  825. (run time)
  826. Used in a colon definition in the form:
  827. @if ... endif
  828.     if ... else ... endif
  829. At run time, 
  830.  selects execution based on the boolean flag.  If 
  831.  is true
  832. (non-zero), execution continues immediately past the 
  833. .  If 
  834.  is false (zero), execution skips till just after the 
  835. @else
  836.  (if present) to execute the false part.  After  either part, execution resumes after the 
  837. @endif.  else
  838.  and its false part are optional.  If missing, false execution skips to just after the 
  839. @endif
  840. At compile time 
  841.  compiles 
  842. @0branch
  843.  and reserves space for an offset at 
  844. @addr.  addr
  845.  and 
  846.  are used later for resolution of the forward branch and error testing.
  847. @immediate    ---    
  848. Mark the most recently made definition so that when encountered at compile time, it will be executed rather than being compiled.  i.e. the precedence bit in the header is set.  This method allows definitions to handle unusual compiling situations rather.  The user may force compilation of an immediate definition by preceeding it with 
  849. @[compile].
  850. in    --- addr    
  851. A user variable containing the byte offset within the current input text buffer (terminal or disk) from which the next text will be accepted.  
  852. @word
  853.  uses and moves the value of 
  854. interpret    ---    
  855. The outer text interpreter which sequentially executes or compiles text from the input stream (terminal or disk) depending upon 
  856. @state
  857. .  If the word name cannot be found after a search of 
  858. @context
  859.  and then 
  860. @current
  861.  it is converted to a number according to the current base.  If that fails, an error message echoing the input name with a " ?" will be output.  Text input will be taken according to the convention for 
  862. @word.
  863. key    --- c    
  864. Leave the ASCII value of the next terminal key struck.  
  865.  waits for a key to be struck.
  866. @latest    --- nfa    
  867. Leave the name field address of the top most word in the 
  868. @current
  869.  vocabulary.
  870. @leave    ---    
  871. Force termination of a 
  872. @do ...
  873.  at the next opportunity by setting the loop limit equal to the current value of the index.  The index itself remains unchanged, and execution proceeds normally until 
  874. @loop
  875. @+loop
  876.  is encountered.
  877. @lfa    pfa --- lfa    
  878. Convert the parameter field address of a dictionary definition to its link field address.
  879. @limit    --- n    
  880. A constant leaving the address just above the highest memory available for a disk buffer.
  881. @lit    --- n    
  882. Within a colon definition, 
  883.  is automatically compiled before each 16 bit literal number encountered in input text.  Later execution of 
  884.  causes the contents of the next dictionary address to be put on the stack.
  885. @literal    n ---    
  886. (compile time)
  887. If compiling, then compile the stack value 
  888.  as a 16 bit literal.  
  889. @literal
  890.  is immediate so that it will execute during a colon definition.  The intended use is in the form:
  891. @: xxx [
  892.  calculate 
  893. @] literal ;
  894. Compilation is suspended for the compile time calculation of a value.  Compilation is resumed and 
  895. @literal
  896.  compiles this value.
  897. @lm    --- addr    
  898. A constant which returns the address of the top of memory available for FORTH to store dictionary words in.  Normally this is the same as 
  899. @first
  900. @load    n ---
  901. Begin interpretation of screen 
  902. .  Loading will terminate at the end of the screen
  903. @load    n ---
  904. Begin interpretation of screen 
  905. .  Loading will terminate at the end of the screen or at 
  906. @loc-blk    n --- f    
  907. Attempt to locate block 
  908.  in memory.  If it is 
  909.  found a true flag is returned.  If is is found 
  910. @prev
  911.  is updated to point to the buffer, and a false flag is returned.
  912. @loop    addr n ---    
  913. (compile time)
  914. @---    
  915. (run time)
  916. Occurs in a colon definition in the form:
  917. @do ... loop
  918. At run time, 
  919. @loop
  920.  selectively controls branching back to the corresponding 
  921.  based on the loop index and limit.  The loop index is incremented by one and compared to limit.  The branch back to 
  922.  occurs until the index equals or exceeds the limit.  At that time, the parameters are discarded and
  923. execution continues after the 
  924. @loop
  925. At compile time, 
  926. @loop
  927.  compiles 
  928. @(loop)
  929.  and uses 
  930. @addr
  931.  to calculate an offset to 
  932. @do.  n
  933.  is used for error testing.
  934. @machine    addr1 addr2 ---    
  935. Junp to the subroutine at address 
  936. @addr2
  937. .  The 6502 registers are loaded from the 4 bytes pointed to by 
  938. @addr1
  939. .  These are in the order X,Y,A,C.  If C is non-zero, the carry flag will be set.  If C is zero, the carry flag will be cleared before calling the subroutine.  The subroutine should return via an RTS instruction.  The registers and flags will be returned in the 4 bytes pointed to by 
  940. @addr1
  941. .  The full 6502 processor flags will be returned at 
  942. @addr1+3
  943. , not just the CARRY flag.  No registers need be preserved by the subroutine.  Note that geosFORTH uses all the user pseudoregisters from $70-$7F, and $FB-$FE.
  944. @max    n1 n2 --- n3    
  945. Leaves the greater (
  946. ) of the two numbers.
  947. @message    n ---    
  948. Display "message 
  949. " to the screen.
  950. @min    n1 n2 --- n3    
  951. Leave the smaller of the two numbers.
  952. @minus    n1 --- n2    
  953. Leave the two's complement of 
  954. mod    n1 n2 --- n3    
  955. Leave the remainder of 
  956. @n1/n2
  957. , with the same sign as 
  958. mouseoff    ---    
  959. Turn off the GEOS mouse service routine.
  960. @mouseon    n1 n2 ---    
  961. Turn on the GEOS mouse service routine, and position the mouse at X pixel coordinate 
  962. , and Y pixel coordinate 
  963. @nfa    pfa --- nfa    
  964. Convert the parameter field address of a definition to its name field address.
  965. @nop    ---    
  966. A word which does nothing, but is sometimes useful because of that.
  967. @number    addr --- n    
  968. Convert a character string (with a leading count byte) at 
  969. @addr
  970.  to a signed 16 bit number, using the current numeric base.  If numeric conversion is not possible, an error message will be given.
  971. @or    n1 n2 -- n3    
  972. Leave the bit wise logical or of two 16 bit values.
  973. @out    --- addr    
  974. A user variable that contains the pixel location for the next output.  This variable is incremented by 
  975. @emit
  976.  and set to zero by 
  977. .  You may alter this value to control display formatting.
  978. @over    n1 n2 --- n1 n2 n1    
  979. Copy the second stack value (
  980. ) to the top of the stack.
  981. @pad    --- addr    
  982. Leave the address of the text output buffer, which is a fixed offset above here.
  983. @pfa    nfa --- pfa    
  984. Convert the name field address of a compiled definition to its parameter field address.
  985. @ppl    --- n    
  986. Returns the current number of pixels per text line (based on the current font value).
  987. @prev    --- addr    
  988. A variable containing the address of the disk buffer most recently referenced.  
  989. @update
  990.  marks this buffer to be latter written to disk if the buffer is needed again.
  991. @put    n ---    
  992. Force the write of screen number 
  993.  to disk.  The update flag will be cleared, but the buffer will still indicate that screen 
  994.  is in memory.
  995. @query    ---    
  996. Accept up to 80 characters of text (until a 
  997. RETURN
  998. ) from the keyboard.  Text is returned at the address contained in 
  999.  and 
  1000.  is set to zero.
  1001. @quit    ---    
  1002. Clear the return stack, stop compiliation, and return control to the keyboard.  No message is given.
  1003. @r    --- n    
  1004. Copy the top of the return stack to the computation stack.
  1005. @r>    --- n    
  1006. Remove the top value from the return stack and leave it on the computation stack.
  1007. @repeat    addr n ---    
  1008. (compile time)
  1009. @---    
  1010. (run time)
  1011. Used within a colon definition in the form:
  1012. @begin ... while ... repeat
  1013. At run time, 
  1014. @repeat
  1015.  forces an unconditional branch back to just after the corresponding 
  1016. @begin
  1017. At compile time, 
  1018. @repeat
  1019.  compiles 
  1020. @branch
  1021.  and the offset from 
  1022. @here
  1023. @addr.  n
  1024.  is used for error testing.
  1025. @rot    n1 n2 n3 --- n2 n3 n1     
  1026. Rotate the top three values on the stack, bringing the third to the top.
  1027. @row    --- addr    
  1028. A user variable which contains the current pixel row where the next output character will be written.
  1029. @rows    --- n    
  1030. A constant which returns the maximum number of pixel rows available on the screen.
  1031. @rp!    ---    
  1032. The word which will initialize the return stack pointer from the user variable 
  1033. @rsa    --- addr    
  1034. A four (4) byte user variable area which can be used as a register I/O area for a call to 
  1035. @machine.
  1036. @scr    --- addr    
  1037. A user variable which contains the current screen number being interpreted.
  1038. @scroll    ---    
  1039. This word will scroll up the C64 high res graphic screen one text line.  The area to be scrolled is specified by the contents of the GEOS page zero areas: 
  1040. @scroll    ---    
  1041. This word will scroll up the C64 high res graphic screen one text line.  The area to be scrolled is specified by the contents of the GEOS page zero areas: 
  1042. @windowTop ($33), windowBottom ($34), leftMargin ($35), rightMargin ($36).
  1043. @sign    n1 n2 --- n2    
  1044. Stores and ASCII minus sign (-) just before a converted numeric output string in the text output buffer when 
  1045.  is negative.  
  1046.  is discarded, but 
  1047.  is maintained.  Must be used between 
  1048. @<# #>
  1049. @smudge    ---    
  1050. Used during word definition to toggle the "smudge bit" in a definitions name field.  This prevents an uncompleted definition from being found during dictionary searches until compiling is completed without an error.
  1051. @source    --- addr    
  1052. a user variable indicating the source of the current input stream (0=keyboard, 1=disk buffer).
  1053. @sp!    ---    
  1054. Initialize the computational stack from 
  1055. @tos.
  1056. sp@    --- addr    
  1057. Returns the address of the stack position to the top of the stack as it was before 
  1058.  was execute. 
  1059. (e.g. 
  1060. @11 21 sp@ @ . . .
  1061.  would type 2 21 11).
  1062. @space    ---    
  1063. Output an ASCII blank.
  1064. @spaces    n ---    
  1065. Output 
  1066.  ASCII blanks.
  1067. @state    --- addr    
  1068. A user variable containing the compilation state.  A non-zero indicates compilation.
  1069. @swap    n1 n2 --- n2 n1    
  1070. Exchange the top two values on the stack.
  1071. @then    addr n ---     
  1072. (compile time)
  1073. An alias of 
  1074. @endif.
  1075. tib    --- addr    
  1076. A user variable containing the address of the terminal input buffer.
  1077. @toggle    addr b ---    
  1078. Complement the contents of 
  1079. @addr
  1080.  by the bit pattern 
  1081. tos    --- n
  1082.     A constant which returns the initial value to use as the top of the FORTH computational stack.
  1083. traverse    addr1 n --- addr2    
  1084. Move across the variable length name field of a word.  
  1085. @addr1
  1086.  is the address of either the length byte or the last letter of the name.  If 
  1087. =1, the motion is toward high memory (
  1088. @addr1
  1089.  should point to the length byte): if 
  1090. =-1, the motion is toward low memory.  
  1091. @addr2
  1092. is the address of the other end of the name.
  1093. @type    addr count ---    
  1094. Output 
  1095.  characters from 
  1096. @addr.
  1097. u*    u1 u2 --- u3    
  1098. Leave the unsigned number product of two unsigned numbers.
  1099. @u/    u1 u2 --- u3 u4    
  1100. Leave the unsigned remainder (
  1101. ) and the unsigned quotient (
  1102. ) from the unsigned dividend (
  1103. ) and the unsigned divisor (
  1104. @u<    u1 u2 --- f    
  1105. Leave a true flag if the unsigned 16 bit number 
  1106.  is less than the 16 bit unsigned number 
  1107. ua    --- n    
  1108. A constant that returns the address of the start of the user variable area.
  1109. @until    f ---    
  1110. (run time)
  1111. @addr n ---    
  1112. @until    f ---    
  1113. (run time)
  1114. @addr n ---    
  1115. (compile time)
  1116. Used within a colon definition in the form:
  1117. @begin ... until
  1118.  At run time, 
  1119. @until
  1120.  controls the conditional branch back to the corresponding 
  1121. @begin
  1122. .  If 
  1123.  is false, execution returns to just after 
  1124. @begin
  1125. ; if it is true, execution continues following the 
  1126. @until
  1127. At compile time, 
  1128. @until
  1129.  compiles 
  1130. @0branch
  1131.  and and offset from 
  1132. @here
  1133. @addr.  n
  1134.  is used for error tests.
  1135. @update    ---    
  1136. Mark the most recently referenced disk block (pointed to by 
  1137. @prev
  1138. ) as altered.  The block will subsequently be written automatically to disk should its buffer be required for storage of a different block.
  1139. @use    --- addr    
  1140.  A user variable containing the address of the block to use next, as the least recently read.
  1141. @user    n ---    
  1142. A defining word used in the form:
  1143. @n user cccc
  1144. This creates a user variable 
  1145. @cccc
  1146. .  The parameter field of 
  1147. @cccc
  1148.  contains 
  1149.  as a fixed offset relative to the user pointer register for this user variable.  When 
  1150. @cccc
  1151.  is later executed, it places the sum of the offset and the user area base on the stack as the storage address of that particular variable.  In geosForth, the user variable area is 64 bytes long.  The first 48 bytes are currently used.
  1152. @variable    n ---    
  1153. A defining word used in the form:
  1154. @n variable cccc
  1155. This creates a definition 
  1156. @cccc
  1157.  with its parameter gfield initialized to 
  1158. .  When 
  1159. @cccc
  1160.  is later executed, the address of its parameter field (containing 
  1161. ) is left on the stack, so that a fetch or store may access this location.
  1162. @vclose    --- f    
  1163. Close the currently open GEOS VLIR file.  The flag returned is the status flag from the GEOS close.
  1164. @vfn    --- addr    
  1165. A sting variable which contains the name to be used by 
  1166. @vopen
  1167.  for the GEOS VLIR filename.  This is normally the source code file, but can contain other data.  The default value is 
  1168. @Forth Source
  1169. .  There is room to hold up to 16 characters plus a null.  The name must be null terminated.
  1170. @vgoto    n --- f    
  1171. Set the GEOS current VLIR record pointer to 
  1172. .  The flag returned is the status flag from the GEOS routine.
  1173. vlist    ---    
  1174. List the names of the definitions in the 
  1175. @context
  1176.  vocabulary.  Pressing the pointer device button will stop the listing.
  1177. @voc-link    --- addr    
  1178. A user variable containing the address of a field in the definition of the most recently created vcoabulary.  All vocabulary names are linked by these fields to allow control for 
  1179. @forget
  1180. ing through multiple vocabularies.
  1181. @vocabulary    ---    
  1182. A defining word used in the form:
  1183. @vocabulary cccc
  1184. This creates a vocabulary definition 
  1185. @cccc
  1186. .  The subsequent use of 
  1187. @cccc
  1188.  will make it the 
  1189. @context
  1190.  vacabulary which is searched first by 
  1191. @interpret
  1192. .  The sequence 
  1193. @cccc definitions
  1194.  will also make 
  1195. @cccc
  1196.  the 
  1197. @current
  1198.  vocabulary into which new definitions are compiled.
  1199. @cccc
  1200.  will be chained so as to include all definitions of the vocabulary in which 
  1201. @cccc
  1202.  is itself defined.  All vocabularies ultimately chain to 
  1203. @forth
  1204. .  By convention, vocabulary names are to be declared 
  1205. @immediate
  1206. @vopen    addr --- f    
  1207. This word opens the GEOS VLIR file whose name is pointed to by 
  1208. @addr
  1209. .  If the file does not exist, it will be created using an INFO Sector for a 
  1210. @vopen    addr --- f    
  1211. This word opens the GEOS VLIR file whose name is pointed to by 
  1212. @addr
  1213. .  If the file does not exist, it will be created using an INFO Sector for a Forth Source file.  The flag returned is the normal GEOS return from 
  1214. @OpenRecordFile
  1215. @while    f ---     
  1216. (run time)
  1217. @addr1 n1 --- addr1 n1 addr2 n2 
  1218. (compile time)
  1219. Used in a colon definition in the form:
  1220. @begin ... while ... repeat
  1221. At run time, 
  1222. @while
  1223.  selects conditional execution based on the boolean flag (
  1224. ).  if 
  1225.  is true (non-zero), 
  1226. @while
  1227.  continues execution of the following true part through to 
  1228. @repeat
  1229. , which then branches back to 
  1230. @begin
  1231. .  If 
  1232.  is false (zero) execution skips to just after 
  1233. @repeat
  1234. , exiting the structure.
  1235. At compile time, 
  1236. @while
  1237.  compiles 
  1238. @0branch
  1239. , and leaves 
  1240. @addr2
  1241.  of the reserved offset.  The stack values will be resolved by 
  1242. @repeat.
  1243. width    --- addr    
  1244. A user variable containing the maximum number of letters saved in the compilation of a definition's name.  It must be 1 through 31, with a default value of 31.
  1245. @word    c ---    
  1246. Process the next text characters from the input stream (either 
  1247.  or a disk buffer), until a delimiter 
  1248.  is found, storing the character string beginning at 
  1249. @here.  word
  1250.  leaves the character count in the first byte, the characters, and ends with two or more blanks.  Leading occurances of 
  1251.  are ignored.
  1252. @x    ---    
  1253. This is the pseudonynm for the "null" or dictionary name of one character of ASCII null (zero).  It is the execution proceedure to terminate interpretation of a line of text from the terminal, or within a disk buffer, as both buffers always have a null at the end.
  1254. @xor    n1 n2 --- n3
  1255.     Leave the bitwise logical exclusive or of the two values.
  1256. @[    ---    
  1257. Used in a colon definition in the form:
  1258. @: xxx [ ... ] ... ;
  1259.  suspends compilation.  The words after 
  1260.  are executed instead of compiled.  This allows calculations or compilation execptions before resuming compilation with 
  1261. .  See 
  1262. @literal, ].
  1263. [compile]    ---    
  1264. Used in a colon definition in the form:
  1265. @: xxx [compile] forth ;
  1266. [compile]
  1267.  will force the compilation of an immediate word that would otherwise execute during compilation.  The above example will select the forth vocabulary when 
  1268.  executes, rather than selecting it at compile time.
  1269. @]    ---    
  1270. Resulte compilation to the completion of a colon definition.  See 
  1271. @^cl    --- n    
  1272. Returns the usable number of characters of the current screen editing line (the last line has only 63 usable characters since the last character in the screen buffer must be a null).
  1273. @^ed    addr n ---    
  1274. This is a variation of 
  1275. @expect
  1276.  except that 
  1277.  does not empty the buffer at 
  1278. @addr
  1279.  before accepting input.  This allows you to change the data in the buffer without retyping it.  
  1280.  is the number of input characters allowed.  Up to 
  1281.  characters may be used.  
  1282.  pads the result out to 
  1283.  characters by appending spaces to what was entered.
  1284. @^el    n ---    
  1285. Edits line 
  1286.  of the current source screen.
  1287. @^es    n ---    
  1288. A full screen edit of source screen number 
  1289.  (source screen 
  1290.  is the same as VLIR record 
  1291.  will display the contents of the source screen as 16 rows of up to 64 characters on the screen and turn on the mouse.  To edit one of the rows, simply position the mouse over a row and click.  The mouse cursor will be replaced by a text cursor (at the beginning of the line) and you may enter data.  Hitting return will put the new information back into the screen line (see 
  1292. @expect
  1293.  for the editing characters available).  To exit 
  1294.  click the mouse cursor below the 16th line.  Note: you can only click the mouse cursor after you are done editing a line.
  1295. @^il    n ---    
  1296. Insert a blank line at line 
  1297. @^il    n ---    
  1298. Insert a blank line at line 
  1299.  into the current source screen.  The current line 
  1300.  and all following lines are shifted down one line.  The last line is discarded.
  1301. @^is    n ---    
  1302. Input the new source screen 
  1303. .  This word uses 
  1304. @buffer
  1305.  to obtain a new buffer for the source screen, fills the buffer with spaces, and then calls 
  1306.  for each of the 16 lines to allow you to imput source code.  You will be presented with a text cursor for all 16 lines.
  1307. @^la    --- addr    
  1308. Calculate the address of the current editing line in the current source screen buffer.
  1309. @^ln    --- addr    
  1310. A user variable which hold the current source screen during editing.
  1311. @^sn"    ---    
  1312. Used in the form:
  1313. @^sn" cccc"
  1314. Used to change the name used for the VLIR file opened by 
  1315. @vopen
  1316. .  The characters up to the next 
  1317.  will be placed in the variable 
  1318. .  The space after the 
  1319. @^sn"
  1320.  is required and is not used as part of the name.  Returns error number 6 if the name is longer than 16 characters.
  1321. @^vs    n ---    
  1322. View screen number 
  1323. .  The screen is read in from the disk if necessary, and then is displayed on the screen.
  1324.              
  1325.                       geosFORTH error message numbers
  1326.     Word not found.
  1327. Stack was empty when an item was needed.
  1328. Dictionary full.
  1329. New word not unique (warning only).
  1330. Referenced screen is already in memory and should not be.
  1331.  is more than 16 characters.
  1332. Use during compilation only.
  1333. Use during execution only.
  1334. Conditionals not paired.
  1335. Definition not completed.
  1336. In protected dictionary.
  1337. Use only while loading.
  1338. Declare vocabulary.
  1339.